// 文件路径: src/router/guards.ts (修正版)

import type { Router } from 'vue-router'
import { useUserStore } from '@/store/modules/user'

// 定义一个不需要登录就能访问的页面路径白名单
const whiteList = ['/login']

export function setupRouterGuards(router: Router) {
  router.beforeEach(async (to, from, next) => {
    // 这里我们直接在守卫内部获取 store 实例
    const userStore = useUserStore()
    const token = userStore.token

    if (token) {
      // --- 情况1: 用户已登录 (有 token) ---
      if (to.path === '/login') {
        // 如果已登录，还想去登录页，就直接重定向到首页
        next({ path: '/' })
      } else {
        // 检查是否已经获取了用户信息
        if (userStore.userInfo) {
          // 如果已有用户信息，直接放行
          next()
        } else {
          // 如果没有用户信息（刷新页面的情况），则尝试获取
          try {
            await userStore.getUserInfo()
            // 获取成功后，再次跳转以确保动态路由等已加载 (如果未来有动态路由)
            // replace: true 确保浏览器历史记录是干净的
            next({ ...to, replace: true })
          } catch (error) {
            // 如果获取用户信息失败 (例如 token 失效)
            console.error('获取用户信息失败:', error)
            // 调用登出 action，清空 token 和用户信息
            userStore.logout()
            // 重定向到登录页，并带上当前想去的页面路径作为参数
            next(`/login?redirect=${to.path}`)
          }
        }
      }
    } else {
      // --- 情况2: 用户未登录 (没有 token) ---
      if (whiteList.includes(to.path)) {
        // 如果在白名单中，直接放行
        next()
      } else {
        // 如果不在白名单中，重定向到登录页
        next(`/login?redirect=${to.path}`)
      }
    }
  })
}
